package mysql8学习.高级.第12章_数据库调优的其他策略;

/**
 * 3.4 优化数据类型
 * 改进表的设计时，可以考虑优化字段的数据类型。这个问题在大家刚从事开发时基本不算是问题。
 * 但是，随着你的经验越来越丰富，参与的项目越来越大，数据量也越来越多的时候，
 * 你就不能只从系统稳定性的角度来思考问题了，还要考虑到系统整体的稳定性和效率。
 * 此时，优先选择符合存储需要的最小的数据类型。
 * 列的字段越大，建立索引时所需要的空间也就越大，这样一页中所能存储的索引节点的数量也就越少，
 * 在遍历时所需要的I/O次数也就越多，索引的性能也就越差。
 * 情况1:对整数类型数据进行优化。 默认用INT
 *      对于非负型的数据(如自增ID、整型IP)来说，要优先使用无符号整型 UNSIGNED 来存储。
 *      因为无符号相对于有符号，同样的字节数，存储的数值范围更大。
 *      如tinyint有符号为-128-127, 无符号为0-255,多出一倍的存储空间。
 * 情况2:既可以使用文本类型也可以使用整数类型的字段，要选择使用整数类型。
 *       将IP地址转换成整型数据
 * 情况3:避免使用TEXT、BLOB数据类型
 *       MySQL内存临时表不支持TEXT、BLOB这样的大数据类型
 *       如果一定要使用，建议把BLOB或是TEXT列分离到单独的扩展表中，
 *       查询时一定不要使用select *
 *       而只需要取出必要的列，不需要TEXT列的数据时不要对该列进行查询。
 * 情况4:避免使用 ENUM 类型
 *      修改 ENUM 值需要使用 ALTER 语句。
 *      ENUM类型的ORDER BY(排序)操作效率低，需要额外操作。使用TINYINT（小整数）来代替ENUM类型。
 * 情况5:使用TIMESTAMP存储时间
 *       TIMESTAMP存储的时间范围1970-01-01 00:00:01 ~ 2038-01-19-03:14:07。
 *       TIMESTAMP使用4字节， DATETIME使用8个字节，同时TIMESTAMP具有自动赋值以及自动更新的特性。
 * 情况6:用DECIMAL代替FL0AT和DOUBLE存储精确浮点数
 *      1)非精准浮点: float,double
 *      2)精准浮点: decimal
 *      Decimal类型为精准浮点数，在计算时不会丢失精度,尤其是财务相关的金融类数据。
 *      占用空间由定义的宽度决定，每4个字节可以存储9位数字,并且小数点要占用一个字节。
 *      可用于存储比bigint更大的整型数据。
 *
 * 总之,遇到数据量大的项目时，- -定要在充分了解业务需求的前提下，合理优化数据类型，
 * 这样才能充分发挥资源的效率，使系统达到最优。
 */
public class C4_优化数据类型 {
}
